﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Linq.Expressions;

using System.Data;
using Prodma.DataAccess.Database;
using Prodma.DataAccess.Interfaces.Models;
using Prodma.DataAccess.Models.ViewModels;
using Prodma.DataAccess.Helper.Enumerators;
using System.Configuration;
using Prodma.DataAccess.Helper.LinqExpressions;
using System.Linq.Dynamic;

namespace Prodma.DataAccess.DataService
{
    public class UrunlerService
    {
        private DataContext context = new DataContext();


        public UrunlerVm GetProduct(int productId)
        {

            var product = (from urun in context.Urunler
                           where urun.ID == productId
                           select new UrunlerVm()
                           {
                               ID = urun.ID,
                               UrunKodu = urun.KOD,
                               UrunAdi = urun.AD,
                               OrijinalKod = urun.ORJINAL_KOD,
                               Hacim = urun.HACIM,
                               Agirlik = urun.NET_AGIRLIK,
                               Fiyat = urun.FIYAT,
                               MarkaArabaID = urun.MARKA_ID,
                               ModelID = urun.MODEL_ID,
                               KategoriID = urun.STOK_GRUP1_ID,
                               FotoURL = urun.FOTO_URL,
                               InsertDate = urun.INSERT_TAR
                               //Iskonto = urun.FIYAT_SATIS.Select(o => o.),
                               //DovizID = urun.FIYAT_SATIS.Select(o => o.DOVIZ).Select(d => d.ID).Single(),
                               //Doviz = new DovizVm { ID = urun.tb_Doviz.ID, Ad = urun.tb_Doviz.Ad, KisaAd = urun.tb_Doviz.KisaAd },
                               //KampanyaFiyat = urun.KAMPANYA_FIYAT,
                               //KampanyaDovizID = urun.tb_Doviz1.ID,
                               //KampanyaDoviz = new DovizVm { ID = urun.tb_Doviz.ID, Ad = urun.tb_Doviz.Ad, KisaAd = urun.tb_Doviz.KisaAd },
                               //MarkaID = urun.tb_Marka.ID,
                               //MarkaAd = urun.MARKA_AD
                               //FotoURL = urun.FotoURL,
                               //ThumbURL = urun.ThumbURL,
                               //FotoArabaURL = urun.FotoArabaURL,
                               //KategoriID = urun.tb_Kategori.ID,
                               //Kategori = new KategoriVm { ID = urun.tb_Kategori.ID, Ad = urun.tb_Kategori.Ad, Aciklama = urun.tb_Kategori.Aciklama },
                               //DurumID = urun.DurumID,
                               //ModelYil = urun.ModelYil,
                               //StokDurumID = urun.tb_Stok_Durum.ID,
                               //StokDurum = new StokDurumVm { ID = urun.tb_Stok_Durum.ID, Ad = urun.tb_Stok_Durum.Ad, Aciklama = urun.tb_Stok_Durum.Aciklama },
                               //ModelID = urun.tb_Product_Category.Id,
                               //Model = new ProductCategoryVm { ID = urun.tb_Product_Category.Id, Level = urun.tb_Product_Category.Level, Name = urun.tb_Product_Category.Name, UstId = urun.tb_Product_Category.tb_Product_Category2.Id },
                               //MarkaArabaID = urun.tb_Product_Category1.Id,
                               //MarkaAraba = new ProductCategoryVm { ID = urun.tb_Product_Category1.Id, Level = urun.tb_Product_Category1.Level, Name = urun.tb_Product_Category1.Name, UstId = urun.tb_Product_Category1.tb_Product_Category2.Id }
                           }).FirstOrDefault();

            return product;
        }
        public IList<UrunlerVm> GetList()
        {
            using (context)
            {
                var list = (from urun in context.Urunler
                            select new UrunlerVm()
                            {
                                ID = urun.ID,
                                UrunKodu = urun.KOD,
                                UrunAdi = urun.AD,
                                OrijinalKod = urun.ORJINAL_KOD,
                                Hacim = urun.HACIM,
                                Agirlik = urun.NET_AGIRLIK,
                                Fiyat = urun.FIYAT,
                                MarkaArabaID = urun.MARKA_ID,
                                ModelID = urun.MODEL_ID,
                                KategoriID = urun.STOK_GRUP1_ID,
                                FotoURL = urun.FOTO_URL,
                                InsertDate = urun.INSERT_TAR
                                //Iskonto = urun.FIYAT_SATIS.Select(o => o.),
                                //DovizID = urun.FIYAT_SATIS.Select(o => o.DOVIZ).Select(d => d.ID).Single(),
                                //Doviz = new DovizVm { ID = urun.tb_Doviz.ID, Ad = urun.tb_Doviz.Ad, KisaAd = urun.tb_Doviz.KisaAd },
                                //KampanyaFiyat = urun.KAMPANYA_FIYAT,
                                //KampanyaDovizID = urun.tb_Doviz1.ID,
                                //KampanyaDoviz = new DovizVm { ID = urun.tb_Doviz.ID, Ad = urun.tb_Doviz.Ad, KisaAd = urun.tb_Doviz.KisaAd },
                                //MarkaID = urun.tb_Marka.ID,
                                //MarkaAd = urun.MARKA_AD
                                //FotoURL = urun.FotoURL,
                                //ThumbURL = urun.ThumbURL,
                                //FotoArabaURL = urun.FotoArabaURL,
                                //KategoriID = urun.tb_Kategori.ID,
                                //Kategori = new KategoriVm { ID = urun.tb_Kategori.ID, Ad = urun.tb_Kategori.Ad, Aciklama = urun.tb_Kategori.Aciklama },
                                //DurumID = urun.DurumID,
                                //ModelYil = urun.ModelYil,
                                //StokDurumID = urun.tb_Stok_Durum.ID,
                                //StokDurum = new StokDurumVm { ID = urun.tb_Stok_Durum.ID, Ad = urun.tb_Stok_Durum.Ad, Aciklama = urun.tb_Stok_Durum.Aciklama },
                                //ModelID = urun.tb_Product_Category.Id,
                                //Model = new ProductCategoryVm { ID = urun.tb_Product_Category.Id, Level = urun.tb_Product_Category.Level, Name = urun.tb_Product_Category.Name, UstId = urun.tb_Product_Category.tb_Product_Category2.Id },
                                //MarkaArabaID = urun.tb_Product_Category1.Id,
                                //MarkaAraba = new ProductCategoryVm { ID = urun.tb_Product_Category1.Id, Level = urun.tb_Product_Category1.Level, Name = urun.tb_Product_Category1.Name, UstId = urun.tb_Product_Category1.tb_Product_Category2.Id }
                            }).ToList();

                System.Web.HttpContext.Current.Session["Urunler"] = list;
                System.Web.HttpContext.Current.Session["UrunlerArama"] = list;
                return list;
            }
        }

        public IList<UrunlerVm> GetListByKategori(int kategoriId)
        {
            IList<UrunlerVm> urunlerSession = (IList<UrunlerVm>)System.Web.HttpContext.Current.Session["UrunlerArama"];

            using (context)
            {
                var list = (from urunler in urunlerSession
                            where urunler.Kategori.ID == kategoriId
                            select new UrunlerVm()
                            {
                                ID = urunler.ID,
                                UrunKodu = urunler.UrunKodu,
                                UrunAdi = urunler.UrunAdi,
                                OrijinalKod = urunler.OrijinalKod,
                                Hacim = urunler.Hacim,
                                Agirlik = urunler.Agirlik,
                                Fiyat = urunler.Fiyat,
                                //Iskonto = urun.FIYAT_SATIS.Select(o => o.),
                                //DovizID = urun.FIYAT_SATIS.Select(o => o.DOVIZ).Select(d => d.ID).Single(),
                                //Doviz = new DovizVm { ID = urun.tb_Doviz.ID, Ad = urun.tb_Doviz.Ad, KisaAd = urun.tb_Doviz.KisaAd },
                                KampanyaFiyat = urunler.KampanyaFiyat,
                                //KampanyaDovizID = urun.tb_Doviz1.ID,
                                //KampanyaDoviz = new DovizVm { ID = urun.tb_Doviz.ID, Ad = urun.tb_Doviz.Ad, KisaAd = urun.tb_Doviz.KisaAd },
                                //MarkaID = urun.tb_Marka.ID,
                                MarkaAd = urunler.MarkaAd
                                //FotoURL = urun.FotoURL,
                                //ThumbURL = urun.ThumbURL,
                                //FotoArabaURL = urun.FotoArabaURL,
                                //KategoriID = urun.tb_Kategori.ID,
                                //Kategori = new KategoriVm { ID = urun.tb_Kategori.ID, Ad = urun.tb_Kategori.Ad, Aciklama = urun.tb_Kategori.Aciklama },
                                //DurumID = urun.DurumID,
                                //ModelYil = urun.ModelYil,
                                //StokDurumID = urun.tb_Stok_Durum.ID,
                                //StokDurum = new StokDurumVm { ID = urun.tb_Stok_Durum.ID, Ad = urun.tb_Stok_Durum.Ad, Aciklama = urun.tb_Stok_Durum.Aciklama },
                                //ModelID = urun.tb_Product_Category.Id,
                                //Model = new ProductCategoryVm { ID = urun.tb_Product_Category.Id, Level = urun.tb_Product_Category.Level, Name = urun.tb_Product_Category.Name, UstId = urun.tb_Product_Category.tb_Product_Category2.Id },
                                //MarkaArabaID = urun.tb_Product_Category1.Id,
                                //MarkaAraba = new ProductCategoryVm { ID = urun.tb_Product_Category1.Id, Level = urun.tb_Product_Category1.Level, Name = urun.tb_Product_Category1.Name, UstId = urun.tb_Product_Category1.tb_Product_Category2.Id }
                            }).ToList();

                System.Web.HttpContext.Current.Session["UrunlerArama"] = list;

                return list;
            }
        }

        public IList<UrunlerVm> GetListByMarka(int markaId)
        {
            IList<UrunlerVm> urunlerSession = (IList<UrunlerVm>)System.Web.HttpContext.Current.Session["UrunlerArama"];

            using (context)
            {
                var list = (from urunler in urunlerSession
                            where urunler.Kategori.ID == markaId
                            select new UrunlerVm()
                            {
                                ID = urunler.ID,
                                UrunKodu = urunler.UrunKodu,
                                UrunAdi = urunler.UrunAdi,
                                OrijinalKod = urunler.OrijinalKod,
                                Hacim = urunler.Hacim,
                                Agirlik = urunler.Agirlik,
                                Fiyat = urunler.Fiyat,
                                //Iskonto = urun.FIYAT_SATIS.Select(o => o.),
                                //DovizID = urun.FIYAT_SATIS.Select(o => o.DOVIZ).Select(d => d.ID).Single(),
                                //Doviz = new DovizVm { ID = urun.tb_Doviz.ID, Ad = urun.tb_Doviz.Ad, KisaAd = urun.tb_Doviz.KisaAd },
                                KampanyaFiyat = urunler.KampanyaFiyat,
                                //KampanyaDovizID = urun.tb_Doviz1.ID,
                                //KampanyaDoviz = new DovizVm { ID = urun.tb_Doviz.ID, Ad = urun.tb_Doviz.Ad, KisaAd = urun.tb_Doviz.KisaAd },
                                //MarkaID = urun.tb_Marka.ID,
                                MarkaAd = urunler.MarkaAd
                                //FotoURL = urun.FotoURL,
                                //ThumbURL = urun.ThumbURL,
                                //FotoArabaURL = urun.FotoArabaURL,
                                //KategoriID = urun.tb_Kategori.ID,
                                //Kategori = new KategoriVm { ID = urun.tb_Kategori.ID, Ad = urun.tb_Kategori.Ad, Aciklama = urun.tb_Kategori.Aciklama },
                                //DurumID = urun.DurumID,
                                //ModelYil = urun.ModelYil,
                                //StokDurumID = urun.tb_Stok_Durum.ID,
                                //StokDurum = new StokDurumVm { ID = urun.tb_Stok_Durum.ID, Ad = urun.tb_Stok_Durum.Ad, Aciklama = urun.tb_Stok_Durum.Aciklama },
                                //ModelID = urun.tb_Product_Category.Id,
                                //Model = new ProductCategoryVm { ID = urun.tb_Product_Category.Id, Level = urun.tb_Product_Category.Level, Name = urun.tb_Product_Category.Name, UstId = urun.tb_Product_Category.tb_Product_Category2.Id },
                                //MarkaArabaID = urun.tb_Product_Category1.Id,
                                //MarkaAraba = new ProductCategoryVm { ID = urun.tb_Product_Category1.Id, Level = urun.tb_Product_Category1.Level, Name = urun.tb_Product_Category1.Name, UstId = urun.tb_Product_Category1.tb_Product_Category2.Id }
                            }).ToList();

                System.Web.HttpContext.Current.Session["UrunlerArama"] = list;

                return list;
            }
        }

        public IList<UrunlerVm> GetListDynamic(UrunlerVm _urun)
        {
            using (context)
            {
                var list = (from urun in context.Urunler
                            select new UrunlerVm()
                            {
                                ID = urun.ID,
                                UrunKodu = urun.KOD,
                                UrunAdi = urun.AD,
                                OrijinalKod = urun.ORJINAL_KOD,
                                Hacim = urun.HACIM,
                                Agirlik = urun.NET_AGIRLIK,
                                Fiyat = urun.FIYAT,
                                MarkaArabaID = urun.MARKA_ID,
                                ModelID = urun.MODEL_ID,
                                KategoriID = urun.STOK_GRUP1_ID,
                                FotoURL = urun.FOTO_URL,
                                InsertDate = urun.INSERT_TAR
                                //Iskonto = urun.FIYAT_SATIS.Select(o => o.),
                                //DovizID = urun.FIYAT_SATIS.Select(o => o.DOVIZ).Select(d => d.ID).Single(),
                                //Doviz = new DovizVm { ID = urun.tb_Doviz.ID, Ad = urun.tb_Doviz.Ad, KisaAd = urun.tb_Doviz.KisaAd },
                                //KampanyaFiyat = urun.KAMPANYA_FIYAT,
                                //KampanyaDovizID = urun.tb_Doviz1.ID,
                                //KampanyaDoviz = new DovizVm { ID = urun.tb_Doviz.ID, Ad = urun.tb_Doviz.Ad, KisaAd = urun.tb_Doviz.KisaAd },
                                //MarkaID = urun.tb_Marka.ID,
                                //MarkaAd = urun.MARKA_AD
                                //FotoURL = urun.FotoURL,
                                //ThumbURL = urun.ThumbURL,
                                //FotoArabaURL = urun.FotoArabaURL,
                                //KategoriID = urun.tb_Kategori.ID,
                                //Kategori = new KategoriVm { ID = urun.tb_Kategori.ID, Ad = urun.tb_Kategori.Ad, Aciklama = urun.tb_Kategori.Aciklama },
                                //DurumID = urun.DurumID,
                                //ModelYil = urun.ModelYil,
                                //StokDurumID = urun.tb_Stok_Durum.ID,
                                //StokDurum = new StokDurumVm { ID = urun.tb_Stok_Durum.ID, Ad = urun.tb_Stok_Durum.Ad, Aciklama = urun.tb_Stok_Durum.Aciklama },
                                //ModelID = urun.tb_Product_Category.Id,
                                //Model = new ProductCategoryVm { ID = urun.tb_Product_Category.Id, Level = urun.tb_Product_Category.Level, Name = urun.tb_Product_Category.Name, UstId = urun.tb_Product_Category.tb_Product_Category2.Id },
                                //MarkaArabaID = urun.tb_Product_Category1.Id,
                                //MarkaAraba = new ProductCategoryVm { ID = urun.tb_Product_Category1.Id, Level = urun.tb_Product_Category1.Level, Name = urun.tb_Product_Category1.Name, UstId = urun.tb_Product_Category1.tb_Product_Category2.Id }
                            });


                IList<UrunlerVm> t;
                t = _urun != null ? list.WhereByExample(_urun, "ID").ToList() : list.ToList();

                return t;
            }
        }

        public IList<UrunlerVm> GetListDynamicByTextBoxes(string sql)
        {
            using (context)
            {
                var list = (from urun in context.Urunler
                            select new UrunlerVm()
                            {
                                ID = urun.ID,
                                UrunKodu = urun.KOD,
                                UrunAdi = urun.AD,
                                OrijinalKod = urun.ORJINAL_KOD,
                                Hacim = urun.HACIM,
                                Agirlik = urun.NET_AGIRLIK,
                                Fiyat = urun.FIYAT,
                                MarkaArabaID = urun.MARKA_ID,
                                ModelID = urun.MODEL_ID,
                                KategoriID = urun.STOK_GRUP1_ID,
                                FotoURL = urun.FOTO_URL,
                                InsertDate = urun.INSERT_TAR
                                //Iskonto = urun.FIYAT_SATIS.Select(o => o.),
                                //DovizID = urun.FIYAT_SATIS.Select(o => o.DOVIZ).Select(d => d.ID).Single(),
                                //Doviz = new DovizVm { ID = urun.tb_Doviz.ID, Ad = urun.tb_Doviz.Ad, KisaAd = urun.tb_Doviz.KisaAd },
                                //KampanyaFiyat = urun.KAMPANYA_FIYAT,
                                //KampanyaDovizID = urun.tb_Doviz1.ID,
                                //KampanyaDoviz = new DovizVm { ID = urun.tb_Doviz.ID, Ad = urun.tb_Doviz.Ad, KisaAd = urun.tb_Doviz.KisaAd },
                                //MarkaID = urun.tb_Marka.ID,
                                //MarkaAd = urun.MARKA_AD
                                //FotoURL = urun.FotoURL,
                                //ThumbURL = urun.ThumbURL,
                                //FotoArabaURL = urun.FotoArabaURL,
                                //KategoriID = urun.tb_Kategori.ID,
                                //Kategori = new KategoriVm { ID = urun.tb_Kategori.ID, Ad = urun.tb_Kategori.Ad, Aciklama = urun.tb_Kategori.Aciklama },
                                //DurumID = urun.DurumID,
                                //ModelYil = urun.ModelYil,
                                //StokDurumID = urun.tb_Stok_Durum.ID,
                                //StokDurum = new StokDurumVm { ID = urun.tb_Stok_Durum.ID, Ad = urun.tb_Stok_Durum.Ad, Aciklama = urun.tb_Stok_Durum.Aciklama },
                                //ModelID = urun.tb_Product_Category.Id,
                                //Model = new ProductCategoryVm { ID = urun.tb_Product_Category.Id, Level = urun.tb_Product_Category.Level, Name = urun.tb_Product_Category.Name, UstId = urun.tb_Product_Category.tb_Product_Category2.Id },
                                //MarkaArabaID = urun.tb_Product_Category1.Id,
                                //MarkaAraba = new ProductCategoryVm { ID = urun.tb_Product_Category1.Id, Level = urun.tb_Product_Category1.Level, Name = urun.tb_Product_Category1.Name, UstId = urun.tb_Product_Category1.tb_Product_Category2.Id }
                            }).Where(sql).ToList();

                return list;
            }
        }

        public UrunlerVm GetProductByOrijinalKod(string orijinalKod)
        {
            DataContext context = new DataContext();
            using (context)
            {
                var product = (from stk in context.Urunler
                               where stk.ORJINAL_KOD == orijinalKod
                               select new UrunlerVm {
                                   ID = stk.ID,
                                   UrunKodu = stk.KOD,
                                   UrunAdi = stk.AD,
                                   OrijinalKod = stk.ORJINAL_KOD,
                                   Hacim = stk.HACIM,
                                   Agirlik = stk.NET_AGIRLIK,
                                   Fiyat = stk.FIYAT,
                                   MarkaArabaID = stk.MARKA_ID,
                                   ModelID = stk.MODEL_ID,
                                   KategoriID = stk.STOK_GRUP1_ID,
                                   FotoURL = stk.FOTO_URL,
                                   InsertDate = stk.INSERT_TAR
                               }).SingleOrDefault();

                if (product != null)
                    return product;
                else
                {
                    var _product = (from stk in context.Urunler
                                    join sok in context.STOK_ORJINAL_KOD on stk.ID equals sok.STOK_ID into stkSok
                                    from kodlar in stkSok.DefaultIfEmpty()
                                    where kodlar.KOD == orijinalKod
                                    select new UrunlerVm()
                                    {
                                        ID = stk.ID,
                                        UrunKodu = stk.KOD,
                                        UrunAdi = stk.AD,
                                        OrijinalKod = stk.ORJINAL_KOD,
                                        Hacim = stk.HACIM,
                                        Agirlik = stk.NET_AGIRLIK,
                                        Fiyat = stk.FIYAT,
                                        MarkaArabaID = stk.MARKA_ID,
                                        ModelID = stk.MODEL_ID,
                                        KategoriID = stk.STOK_GRUP1_ID,
                                        FotoURL = stk.FOTO_URL,
                                        InsertDate = stk.INSERT_TAR
                                    }).FirstOrDefault();
                    return _product;
                }
            }
        }

        public UrunlerVm GetProductByAlternatifKod(string alternatifKod, int cariID)
        {
            using (context)
            {
                var urun = (from stk in context.Urunler
                            join sok in context.STOK_ALTERNATIF on stk.ID equals sok.STOK_ID into stkSok
                            from kodlar in stkSok.DefaultIfEmpty()
                            where kodlar.CARI_ID == cariID && kodlar.CARI_STOK_KODU == alternatifKod
                            select new UrunlerVm()
                            {
                                ID = stk.ID,
                                UrunKodu = stk.KOD,
                                UrunAdi = stk.AD,
                                OrijinalKod = stk.ORJINAL_KOD,
                                Hacim = stk.HACIM,
                                Agirlik = stk.NET_AGIRLIK,
                                Fiyat = stk.FIYAT,
                                MarkaArabaID = stk.MARKA_ID,
                                ModelID = stk.MODEL_ID,
                                KategoriID = stk.STOK_GRUP1_ID,
                                FotoURL = stk.FOTO_URL,
                                InsertDate = stk.INSERT_TAR
                            }).FirstOrDefault();

                return urun;
            }
        }

        public UrunlerVm GetProductDetail(int productId)
        {
            using (context)
            {
                var product = (from urun in context.Urunler
                               where urun.ID == productId
                               select new UrunlerVm
                               {
                                   ID = urun.ID,
                                   UrunKodu = urun.KOD,
                                   UrunAdi = urun.AD,
                                   OrijinalKod = urun.ORJINAL_KOD,
                                   Hacim = urun.HACIM,
                                   Agirlik = urun.NET_AGIRLIK,
                                   Fiyat = urun.FIYAT,
                                   MarkaArabaID = urun.MARKA_ID,
                                   ModelID = urun.MODEL_ID,
                                   KategoriID = urun.STOK_GRUP1_ID,
                                   FotoURL = urun.FOTO_URL,
                                   InsertDate = urun.INSERT_TAR
                                   //Iskonto = urun.FIYAT_SATIS.Select(o => o.),
                                   //DovizID = urun.FIYAT_SATIS.Select(o => o.DOVIZ).Select(d => d.ID).Single(),
                                   //Doviz = new DovizVm { ID = urun.tb_Doviz.ID, Ad = urun.tb_Doviz.Ad, KisaAd = urun.tb_Doviz.KisaAd },
                                   //KampanyaFiyat = urun.KAMPANYA_FIYAT,
                                   //KampanyaDovizID = urun.tb_Doviz1.ID,
                                   //KampanyaDoviz = new DovizVm { ID = urun.tb_Doviz.ID, Ad = urun.tb_Doviz.Ad, KisaAd = urun.tb_Doviz.KisaAd },
                                   //MarkaID = urun.tb_Marka.ID,
                                   //MarkaAd = urun.MARKA_AD
                                   //FotoURL = urun.FotoURL,
                                   //ThumbURL = urun.ThumbURL,
                                   //FotoArabaURL = urun.FotoArabaURL,
                                   //KategoriID = urun.tb_Kategori.ID,
                                   //Kategori = new KategoriVm { ID = urun.tb_Kategori.ID, Ad = urun.tb_Kategori.Ad, Aciklama = urun.tb_Kategori.Aciklama },
                                   //DurumID = urun.DurumID,
                                   //ModelYil = urun.ModelYil,
                                   //StokDurumID = urun.tb_Stok_Durum.ID,
                                   //StokDurum = new StokDurumVm { ID = urun.tb_Stok_Durum.ID, Ad = urun.tb_Stok_Durum.Ad, Aciklama = urun.tb_Stok_Durum.Aciklama },
                                   //ModelID = urun.tb_Product_Category.Id,
                                   //Model = new ProductCategoryVm { ID = urun.tb_Product_Category.Id, Level = urun.tb_Product_Category.Level, Name = urun.tb_Product_Category.Name, UstId = urun.tb_Product_Category.tb_Product_Category2.Id },
                                   //MarkaArabaID = urun.tb_Product_Category1.Id,
                                   //MarkaAraba = new ProductCategoryVm { ID = urun.tb_Product_Category1.Id, Level = urun.tb_Product_Category1.Level, Name = urun.tb_Product_Category1.Name, UstId = urun.tb_Product_Category1.tb_Product_Category2.Id }
                               }).SingleOrDefault();

                return product;
            }
        }

        public IQueryable<UrunlerVm> FindProducts()
        {
            return (from urun in context.Urunler
                   select new UrunlerVm()
                   {
                       ID = urun.ID,
                       UrunKodu = urun.KOD,
                       UrunAdi = urun.AD,
                       OrijinalKod = urun.ORJINAL_KOD,
                       Hacim = urun.HACIM,
                       Agirlik = urun.NET_AGIRLIK,
                       Fiyat = urun.FIYAT,
                       MarkaArabaID = urun.MARKA_ID,
                       ModelID = urun.MODEL_ID,
                       KategoriID = urun.STOK_GRUP1_ID,
                       FotoURL = urun.FOTO_URL,
                       InsertDate = urun.INSERT_TAR
                       //Iskonto = urun.FIYAT_SATIS.Select(o => o.),
                       //DovizID = urun.FIYAT_SATIS.Select(o => o.DOVIZ).Select(d => d.ID).Single(),
                       //Doviz = new DovizVm { ID = urun.tb_Doviz.ID, Ad = urun.tb_Doviz.Ad, KisaAd = urun.tb_Doviz.KisaAd },
                       //KampanyaFiyat = urun.KAMPANYA_FIYAT,
                       //KampanyaDovizID = urun.tb_Doviz1.ID,
                       //KampanyaDoviz = new DovizVm { ID = urun.tb_Doviz.ID, Ad = urun.tb_Doviz.Ad, KisaAd = urun.tb_Doviz.KisaAd },
                       //MarkaID = urun.tb_Marka.ID,
                       //MarkaAd = urun.MARKA_AD
                       //FotoURL = urun.FotoURL,
                       //ThumbURL = urun.ThumbURL,
                       //FotoArabaURL = urun.FotoArabaURL,
                       //KategoriID = urun.tb_Kategori.ID,
                       //Kategori = new KategoriVm { ID = urun.tb_Kategori.ID, Ad = urun.tb_Kategori.Ad, Aciklama = urun.tb_Kategori.Aciklama },
                       //DurumID = urun.DurumID,
                       //ModelYil = urun.ModelYil,
                       //StokDurumID = urun.tb_Stok_Durum.ID,
                       //StokDurum = new StokDurumVm { ID = urun.tb_Stok_Durum.ID, Ad = urun.tb_Stok_Durum.Ad, Aciklama = urun.tb_Stok_Durum.Aciklama },
                       //ModelID = urun.tb_Product_Category.Id,
                       //Model = new ProductCategoryVm { ID = urun.tb_Product_Category.Id, Level = urun.tb_Product_Category.Level, Name = urun.tb_Product_Category.Name, UstId = urun.tb_Product_Category.tb_Product_Category2.Id },
                       //MarkaArabaID = urun.tb_Product_Category1.Id,
                       //MarkaAraba = new ProductCategoryVm { ID = urun.tb_Product_Category1.Id, Level = urun.tb_Product_Category1.Level, Name = urun.tb_Product_Category1.Name, UstId = urun.tb_Product_Category1.tb_Product_Category2.Id }
                   }).OrderBy(x=>x.ID);
        }

        public IList<UrunlerVm> GetList(int brandId)
        {
            using (context)
            {
                var list = (from urun in context.Urunler
                            //where urun.MARKA_ID.ID == brandId
                            select new UrunlerVm()
                            {
                                ID = urun.ID,
                                UrunKodu = urun.KOD,
                                UrunAdi = urun.AD,
                                OrijinalKod = urun.ORJINAL_KOD,
                                Hacim = urun.HACIM,
                                Agirlik = urun.NET_AGIRLIK,
                                Fiyat = urun.FIYAT,
                                MarkaArabaID = urun.MARKA_ID,
                                ModelID = urun.MODEL_ID,
                                KategoriID = urun.STOK_GRUP1_ID,
                                FotoURL = urun.FOTO_URL,
                                InsertDate = urun.INSERT_TAR
                                //Iskonto = urun.FIYAT_SATIS.Select(o => o.),
                                //DovizID = urun.FIYAT_SATIS.Select(o => o.DOVIZ).Select(d => d.ID).Single(),
                                //Doviz = new DovizVm { ID = urun.tb_Doviz.ID, Ad = urun.tb_Doviz.Ad, KisaAd = urun.tb_Doviz.KisaAd },
                                //KampanyaFiyat = urun.KAMPANYA_FIYAT,
                                //KampanyaDovizID = urun.tb_Doviz1.ID,
                                //KampanyaDoviz = new DovizVm { ID = urun.tb_Doviz.ID, Ad = urun.tb_Doviz.Ad, KisaAd = urun.tb_Doviz.KisaAd },
                                //MarkaID = urun.tb_Marka.ID,
                                //MarkaAd = urun.MARKA_AD
                                //FotoURL = urun.FotoURL,
                                //ThumbURL = urun.ThumbURL,
                                //FotoArabaURL = urun.FotoArabaURL,
                                //KategoriID = urun.tb_Kategori.ID,
                                //Kategori = new KategoriVm { ID = urun.tb_Kategori.ID, Ad = urun.tb_Kategori.Ad, Aciklama = urun.tb_Kategori.Aciklama },
                                //DurumID = urun.DurumID,
                                //ModelYil = urun.ModelYil,
                                //StokDurumID = urun.tb_Stok_Durum.ID,
                                //StokDurum = new StokDurumVm { ID = urun.tb_Stok_Durum.ID, Ad = urun.tb_Stok_Durum.Ad, Aciklama = urun.tb_Stok_Durum.Aciklama },
                                //ModelID = urun.tb_Product_Category.Id,
                                //Model = new ProductCategoryVm { ID = urun.tb_Product_Category.Id, Level = urun.tb_Product_Category.Level, Name = urun.tb_Product_Category.Name, UstId = urun.tb_Product_Category.tb_Product_Category2.Id },
                                //MarkaArabaID = urun.tb_Product_Category1.Id,
                                //MarkaAraba = new ProductCategoryVm { ID = urun.tb_Product_Category1.Id, Level = urun.tb_Product_Category1.Level, Name = urun.tb_Product_Category1.Name, UstId = urun.tb_Product_Category1.tb_Product_Category2.Id }
                            }).ToList();

                System.Web.HttpContext.Current.Session["Urunler"] = list;

                return list;
            }
        }

        #region IRowCountOperation Members

        public int GetTotalRowCount()
        {
            DataContext context = new DataContext();
            using (context)
            {
                int rowCount = (from urunler in context.Urunler
                                select urunler).Count();

                return rowCount;
            }
        }

        public int GetTotalRowCount(Dictionary<string, string> find)
        {
            throw new NotImplementedException();
        }

        public void SetDefaultArchive(int id)
        {
            ConfigurationManager.AppSettings["defaultArchive"] = id.ToString();
        }

        #endregion
    }
}
